/*=============================================================================================================
 * DBHelper.java

 * 1.프로젝트 : ToYou - 명함관리 어플
 * 2.패 키 지 : com.trillion.toyou
 * 3.작업환경 : Android
 * 2.작 업 자 : 신재업, 조수연
 * 3.작업일자 : 2014.12.10
 * 4.내    용 : 프로젝트에서 사용될 데이터
 * 5.수 정 자 : 
 * (1) 조수연, 신재업
 * (2) 손호준
 * (3)(4)(6)(7)(8) 신재업
 * (5) 손호준
 * (9) 조수연
 * 
 * 
 * 6.수정일자 :  
 * (1) 2014.12.11 02:06pm
 * (2) 2014.12.12 04:51pm
 * (3) 2014.12.12 05:37pm
 * (4) 2014.12.13 11:26am
 * (5) 2014.12.15 11:30am
 * (6) 2014.12.16 09:48am
 * (7) 2014.12.16 12:16pm
 * (8) 2014.12.16 05:50pm
 * (9) 2014.12.17 10:02am
 * 
 * 7.수정내용 : 
 * (1) modifyCategory 메소드 추가함, selectOtheList의 _name, _data 메소드에 반환 data를 추가함. 
 * (2) delte 메소드에서 무조건 false 를 반환하는 것을 수정 
 * (3) 본인 명함 리스트에서 반환시 대표 명함이 ArrayList 0번 위치에 위치하게 함
 * (4) modify 에서 수정 기준 nid로 변경
 * (5) 초기값 추가 내용 복원
 * (6) 초성 검색 부분 주석 추가/회사명도 같이 검색 하도록 추가
 * (7) 검색 대상에 영문이 포함 되었을경우 에러 출력 되는 부분 수정(한글 부분만 잘라서 검색 하도록 수정)
 * (8) 현재시간 저장 수정
 * (9) insertOther에 있는 쿼리문에 values 의 rdate 순서가 안맞아서 수정함.
 * =============================================================================================================*/

package com.trillion.toyou;

import java.util.ArrayList;
import java.util.Collections;
import java.util.HashMap;
import java.util.HashSet;


import java.util.Iterator;
import java.util.LinkedHashSet;

import android.content.Context;
import android.database.Cursor;
import android.database.sqlite.SQLiteDatabase;
import android.database.sqlite.SQLiteDatabase.CursorFactory;
import android.database.sqlite.SQLiteOpenHelper;
import android.util.Log;

public class DBHelper extends SQLiteOpenHelper {
	Context context;
	String dbName;
	int dbVersion;
	SQLiteDatabase db;
	private final String STYLEID = "12";
	private static final int BASE_CODE = 44032;
	private static final int CHOSUNG = 588;
	private static final char[] CHOSUNG_LIST = { 'ㄱ', 'ㄲ', 'ㄴ', 'ㄷ', 'ㄸ', 'ㄹ',
			'ㅁ', 'ㅂ', 'ㅃ', 'ㅅ', 'ㅆ', 'ㅇ', 'ㅈ', 'ㅉ', 'ㅊ', 'ㅋ', 'ㅌ', 'ㅍ', 'ㅎ' };
	private static final char[] LOWERCASE = {'a','b','c','d','e','f','g','h','i','j','k',
		'l','m','n','o','p','q','r','s','t','u','v','w','x','y','z'};
	private static final char[] UPPERCASE ={'A','B','C','D','E','F','G','H','I','J','K',
		'L','M','N','O','P','Q','R','S','T','U','V','W','X','Y','Z'};
//	private static final char[] INTEGER_LIST = {'0','1','2','3','4','5','6','7','8','9'};

	public DBHelper(Context context, String name, CursorFactory factory,
			int version) {

		super(context, name, factory, version);
		this.context = context;
		this.dbName = name;
		this.dbVersion = version;

	}

	@Override
	public void onCreate(SQLiteDatabase db) {
		this.db = db;
		String sql = "create table if not exists namecard(nid integer primary key autoincrement,"
				+ "nname varchar2(30), department varchar2(100), grade varchar2(30),"
				+ "company varchar2(50), phonenum varchar2(30), telnum varchar2(30), email varchar2(30),"
				+ "address varchar2(100), rdate varchar2(30), styleid integer, category varchar2(50), mtitle integer)";

		db.execSQL(sql);

//		// 초기데이터 1
//		String[] params1 = { "김민식", "마케팅", "사원", "중앙HTA", "010-1234-5678", "02-123-5678",
//				"minsik@naver.com", "서울특별시 종로구 율곡로10길 105 디아망4층 중앙default",
//				 "1", "default", "0" };
//		db.execSQL(
//				"insert into namecard(nname, department, grade, company, phonenum, telnum, email,"
//						+ "address, rdate ,styleid, category, mtitle) values(?,?,?,?,?,?,?,?,datetime('now'),?,?,?) ",
//				params1);
//		// 초기데이터 2
//		String[] params2 = { "손호준", "게임기회부", "주임", "트릴리언", "010-1111-2222", "02-111-2222",
//				"hojun@gmail.com", "서울특별시 종로구 율곡로10길 105 디아망4층 중앙default",
//				 "1", "default", "0" };
//		db.execSQL(
//				"insert into namecard( nname, department, grade, company, phonenum, telnum, email,"
//						+ "address, rdate ,styleid, category, mtitle) values(?,?,?,?,?,?,?,?,datetime('now'),?,?,?) ",
//				params2);
//		// 초기데이터 3
//		String[] params3 = { "신재업", "개발부", "사장", "트릴리언", "010-3333-4444", "02-333-4444",
//				"jeup@naver.com", "서울특별시 종로구 율곡로10길 105 디아망4층 중앙default",
//				 "2", "default", "0" };
//		db.execSQL(
//				"insert into namecard( nname, department, grade, company, phonenum, telnum, email,"
//						+ "address, rdate ,styleid, category, mtitle) values(?,?,?,?,?,?,?,?,datetime('now'),?,?,?) ",
//				params3);
//		// 초기데이터 4
//		String[] params4 = { "최명식", "디자인", "팀장", "중앙", "010-5555-6666", "02-555-6666",
//				"gisun@daum.net", "서울특별시 종로구 율곡로10길 105 디아망4층 중앙default",
//				 "3", "default", "0" };
//		db.execSQL(
//				"insert into namecard( nname, department, grade, company, phonenum, telnum, email,"
//						+ "address, rdate ,styleid, category, mtitle) values(?,?,?,?,?,?,?,?,datetime('now'),?,?,?) ",
//				params4);
//		// 초기데이터 5
//		String[] params5 = { "최명식", "개발부", "팀장", "중앙", "010-7777-8888", "02-777-8888",
//				"myeongsik@naver.com", "서울특별시 종로구 율곡로10길 105 디아망4층 중앙default",
//				 "2", "default", "0" };
//		db.execSQL(
//				"insert into namecard( nname, department, grade, company, phonenum, telnum, email,"
//						+ "address, rdate ,styleid, category, mtitle) values(?,?,?,?,?,?,?,?,datetime('now'),?,?,?) ",
//				params5);
//		// 초기데이터 6
//		String[] params6 = { "조수연", "게임기회부", "사원", "중앙", "010-9999-0000", "02-999-0000",
//				"suyeonk@naver.com", "서울특별시 종로구 율곡로10길 105 디아망4층 중앙default",
//				 "2", "default", "0" };
//		db.execSQL(
//				"insert into namecard( nname, department, grade, company, phonenum, telnum, email,"
//						+ "address, rdate ,styleid, category, mtitle) values(?,?,?,?,?,?,?,?,datetime('now'),?,?,?) ",
//				params6);
//		String[] params7 = { "곽근성", "게임기회부", "사원", "중앙", "010-9999-0000", "02-999-1111",
//				"suyeonk@naver.com", "서울특별시 종로구 율곡로10길 105 디아망4층 중앙default",
//				 "2", "default", "0" };
//		db.execSQL(
//				"insert into namecard( nname, department, grade, company, phonenum, telnum, email,"
//						+ "address, rdate ,styleid, category, mtitle) values(?,?,?,?,?,?,?,?,datetime('now'),?,?,?) ",
//				params7);
//		String[] params8 = { "가", "게임기회부", "사원", "중앙", "010-9999-0000", "02-999-1111",
//				"suyeonk@naver.com", "서울특별시 종로구 율곡로10길 105 디아망4층 중앙default",
//				 "2", "default", "0" };
//		db.execSQL(
//				"insert into namecard( nname, department, grade, company, phonenum, telnum, email,"
//						+ "address, rdate ,styleid, category, mtitle) values(?,?,?,?,?,?,?,?,datetime('now'),?,?,?) ",
//				params8);

	}

	@Override
	public void onUpgrade(SQLiteDatabase db, int oldVersion, int newVersion) {

		
	}

	public Data selectMineOne() { // 메인에 있는 대표명함 리스트 출력 이름과 전화번호만 출력.
		db = getReadableDatabase();
		Data d = new Data();
		String sql = "select * from namecard where category='mine' and mtitle=1 ";
		Cursor c = db.rawQuery(sql, null);
		while (c.moveToNext()) {

			d.setNid(c.getInt(0));
			d.setNname(c.getString(1));
			d.setDepartment(c.getString(2));
			d.setGrade(c.getString(3));
			d.setCompany(c.getString(4));
			d.setPhoneNum(c.getString(5));
			d.setTelNum(c.getString(6));
			d.setEmail(c.getString(7));
			d.setAddress(c.getString(8));
			d.setrDate(c.getString(9));
			d.setStyleId(c.getInt(10));
			d.setCategory(c.getString(11));
			d.setMtitle(c.getInt(12));

		}
		return d;
	}

	public ArrayList<Data> selectMine() { // 내 명함 리스트들을 모두 뽑아오는것.

		ArrayList<Data> al = new ArrayList<Data>();
		db = getReadableDatabase();
		String sql = "select * from namecard where category='mine' order by mtitle desc";
		Cursor c = db.rawQuery(sql, null);

		while (c.moveToNext()) {

			Data d = new Data();
			d.setNid(c.getInt(0));
			d.setNname(c.getString(1));
			d.setDepartment(c.getString(2));
			d.setGrade(c.getString(3));
			d.setCompany(c.getString(4));
			d.setPhoneNum(c.getString(5));
			d.setTelNum(c.getString(6));
			d.setEmail(c.getString(7));
			d.setAddress(c.getString(8));
			d.setrDate(c.getString(9));
			d.setStyleId(c.getInt(10));
			d.setCategory(c.getString(11));
			d.setMtitle(c.getInt(12));

			al.add(d);
		}
		return al;
	}
	public Data selectone(String nid) { // nid기준 명한 한개만 받아오기

		Data d = new Data();
		db = getReadableDatabase();
		String sql = "select * from namecard where nid =? ";
		String[] params = {nid};
		Cursor c = db.rawQuery(sql, params);

		if(c.moveToNext()) {

			
			d.setNid(c.getInt(0));
			d.setNname(c.getString(1));
			d.setDepartment(c.getString(2));
			d.setGrade(c.getString(3));
			d.setCompany(c.getString(4));
			d.setPhoneNum(c.getString(5));
			d.setTelNum(c.getString(6));
			d.setEmail(c.getString(7));
			d.setAddress(c.getString(8));
			d.setrDate(c.getString(9));
			d.setStyleId(c.getInt(10));
			d.setCategory(c.getString(11));
			d.setMtitle(c.getInt(12));

		}
		return d;
	}

	
	
	public ArrayList<Data> selectOtherList_name(String findstr,String category) { //가나다순 다른 사람 명함 받아오기

		ArrayList<Data> al = new ArrayList<Data>();
		LinkedHashSet<Data> hs = new LinkedHashSet<Data>();
		

		db = getReadableDatabase();
		String sql = "select * from namecard where category not like '%mine%' and category like ? order by nname";
		String params[] = {"%"+category+"%"};
		Cursor c = db.rawQuery(sql, params);
		
		if(findstr.equals("")){  // 검색어가 없으면
			while (c.moveToNext()) {
				Data d = new Data();
				d.setNid(c.getInt(0));
				d.setNname(c.getString(1));
				d.setDepartment(c.getString(2));
				d.setGrade(c.getString(3));
				d.setCompany(c.getString(4));
				d.setPhoneNum(c.getString(5));
				d.setTelNum(c.getString(6));
				d.setEmail(c.getString(7));
				d.setAddress(c.getString(8));
				d.setrDate(c.getString(9));
				d.setStyleId(c.getInt(10));
				d.setCategory(c.getString(11));
				Log.d("입력날짜", c.getString(9));
				al.add(d); 
			}
		}else{  // 검색어가 있는 경우
			
			
			
			switch(findGetType(findstr)){
			case 1:
			case 2: 
				while (c.moveToNext()) {
					Data d = new Data();
					
					d.setNid(c.getInt(0));
					d.setNname(c.getString(1));
					d.setDepartment(c.getString(2));
					d.setGrade(c.getString(3));
					d.setCompany(c.getString(4));
					d.setPhoneNum(c.getString(5));
					d.setTelNum(c.getString(6));
					d.setEmail(c.getString(7));
					d.setAddress(c.getString(8));
					d.setrDate(c.getString(9));
					d.setStyleId(c.getInt(10));
					d.setCategory(c.getString(11));
					
					String temp = "";
					for(int i=0;i<c.getString(4).length();i++){
						if(Character.getType(c.getString(4).charAt(i))==1){ //영문확인(대문자)
							for(int a=0;a<UPPERCASE.length;a++){
								if(c.getString(4).charAt(i)==UPPERCASE[a]){
									temp += LOWERCASE[a];  // 대문자 소문자로 변환하여 재 구성
								}							
							}
											
						}else if(Character.getType(c.getString(4).charAt(i))==2){//영문확인(소문자)
							temp += c.getString(4).charAt(i);
						}
					}
					
								
					
					int check = 0;
					int findllength = findstr.length(); 
					int numberoffind = temp.length() - findllength;
										
					if (temp.length() >= findllength) { 
						for (int a = 0; a <= numberoffind; a++) {
							check = 0;
							while (check < findllength) {
								if(temp.charAt(a+check)==findstr.charAt(check)){
									check++; 
								}else{
									break;
								}
							}
							if(check==findllength){  
								hs.add(d);
								
							}
						
						}
					}
					
					
					//  영문 이름 부분 검색
					temp = "";
					numberoffind = temp.length() - findllength;
					for(int i=0;i<c.getString(1).length();i++){
						if(Character.getType(c.getString(1).charAt(i))==1){ 
							for(int a=0;a<UPPERCASE.length;a++){
								if(c.getString(1).charAt(i)==UPPERCASE[a]){
									temp += LOWERCASE[a];  
								}							
							}
											
						}else if(Character.getType(c.getString(1).charAt(i))==2){
							temp += c.getString(1).charAt(i);
						}
					}
					
					if (temp.length() >= findllength) { 
						for (int a = 0; a <= numberoffind; a++) {
							check = 0;
							while (check < findllength) {
								if(temp.charAt(a+check)==findstr.charAt(check)){
									check++; 
								}else{
									break;
								}
							}
							if(check==findllength){  
								hs.add(d); 
								
							}
						
						}
					}
					
				}
				
				break;
			case 5: 
				while (c.moveToNext()) {
					Data d = new Data();
					
					d.setNid(c.getInt(0));
					d.setNname(c.getString(1));
					d.setDepartment(c.getString(2));
					d.setGrade(c.getString(3));
					d.setCompany(c.getString(4));
					d.setPhoneNum(c.getString(5));
					d.setTelNum(c.getString(6));
					d.setEmail(c.getString(7));
					d.setAddress(c.getString(8));
					d.setrDate(c.getString(9));
					d.setStyleId(c.getInt(10));
					d.setCategory(c.getString(11));
					
					//초성 이름 검색 부분
					
					String temp = "";
					for(int i=0;i<c.getString(1).length();i++){
						if(Character.getType(c.getString(1).charAt(i))==5){ // 한글확인
							temp += c.getString(1).charAt(i);  // 한글 부분만 잘라서 재 구성
						}
					}
					int check = 0;
					int findllength = findstr.length();  // 검색어의 길이
					int numberoffind = c.getString(1).length() - findllength; // 검색 횟수(검색 대상 - 검색어)
					
					if (temp.length() >= findllength) { //검색어의 길이가 검색 대상의 길이보다 작거나 같으면 
						for (int a = 0; a <= numberoffind; a++) { // 검색 횟수 만큼 반복
							check = 0; // 초기화
							while (check < findllength) { //일치하는부분을 찾을때까지 반복
								if (isInitialSound(findstr.charAt(check))) {//검색어에 자음이 있는지 확인
									if(getInitialSound(temp.charAt(a+check))==findstr.charAt(check)){//검색어의 자음과 검색 대상의 자음 일치 확인
										check++; // 일치하면 다음 단어로 넘어가기 위해 ++
									}else{break;}
								}else{  // 검색어가 초성이 아닌 단어인 경우
									if(temp.charAt(a+check)==findstr.charAt(check)){  // 단어의 일치 확인
										check++; //일치하면 다음 단어로 넘어가기 위해 ++ 
									}else{break;}
								}
							}
							if(check==findllength){  //검색어와 매치된 숫자가 같은 데이터를 발견하면 데이터 추가
								hs.add(d); // 중복 방지를 위해 해시셋에 저장(정렬도 중요하기 때문에 링크드 사용)
								
							}
							
						}
					}
					//초성 회사명 검색 부분
					temp ="";
					for(int i=0;i<c.getString(4).length();i++){
						if(Character.getType(c.getString(4).charAt(i))==5){
							temp += c.getString(4).charAt(i);}
					}
					int numberoffindcom = temp.length() - findllength;
					if (temp.length() >= findllength) { 
						for (int a = 0; a <= numberoffindcom; a++) {
							check = 0;
							while (check < findllength) {
								if (isInitialSound(findstr.charAt(check))) {
									if(getInitialSound(temp.charAt(a+check))==findstr.charAt(check)){
										check++; 
									}else{break;}
								}else{ 
									if(temp.charAt(a+check)==findstr.charAt(check)){
										check++; 
									}else{break;}
								}
							}
							if(check==findllength){hs.add(d);}
						}
					}
				}
				
				break;

			case -1: 
				al.clear();
				break; 
			}
//			ArrayList<String> art = new ArrayList<String>(hm.keySet());
//			Collections.sort(art);
//			al.clear();
//			for(int a = 0 ; a<art.size();a++){
//				al.add(hm.get(a));
//			}
			al.addAll(hs);
		}
		
			
		
		return al;
	}
	
	public ArrayList<Data> selectOtherList_date(String findstr,String category) { //최신순

		ArrayList<Data> al = new ArrayList<Data>();
		LinkedHashSet<Data> hs = new LinkedHashSet<Data>();

		db = getReadableDatabase();
		String sql = "select * from namecard where category not like '%mine%' and category like ? order by nid desc";
		String params[] = {"%"+category+"%"};
		Cursor c = db.rawQuery(sql, params);
	
		if(findstr.equals("")){
			while (c.moveToNext()) {
				Data d = new Data();
				d.setNid(c.getInt(0));
				d.setNname(c.getString(1));
				d.setDepartment(c.getString(2));
				d.setGrade(c.getString(3));
				d.setCompany(c.getString(4));
				d.setPhoneNum(c.getString(5));
				d.setTelNum(c.getString(6));
				d.setEmail(c.getString(7));
				d.setAddress(c.getString(8));
				d.setrDate(c.getString(9));
				d.setStyleId(c.getInt(10));
				d.setCategory(c.getString(11));
				

				al.add(d);
			}
		}else{
	
			
			
			switch(findGetType(findstr)){
			case 1:
			case 2: 
				while (c.moveToNext()) {
					Data d = new Data();
					
					d.setNid(c.getInt(0));
					d.setNname(c.getString(1));
					d.setDepartment(c.getString(2));
					d.setGrade(c.getString(3));
					d.setCompany(c.getString(4));
					d.setPhoneNum(c.getString(5));
					d.setTelNum(c.getString(6));
					d.setEmail(c.getString(7));
					d.setAddress(c.getString(8));
					d.setrDate(c.getString(9));
					d.setStyleId(c.getInt(10));
					d.setCategory(c.getString(11));
					
					String temp = "";
					for(int i=0;i<c.getString(4).length();i++){
						if(Character.getType(c.getString(4).charAt(i))==1){ //영문확인(대문자)
							for(int a=0;a<UPPERCASE.length;a++){
								if(c.getString(4).charAt(i)==UPPERCASE[a]){
									temp += LOWERCASE[a];  // 대문자 소문자로 변환하여 재 구성
								}							
							}
											
						}else if(Character.getType(c.getString(4).charAt(i))==2){//영문확인(소문자)
							temp += c.getString(4).charAt(i);
						}
					}
					
								
					
					int check = 0;
					int findllength = findstr.length(); 
					int numberoffind = temp.length() - findllength;
										
					if (temp.length() >= findllength) { 
						for (int a = 0; a <= numberoffind; a++) {
							check = 0;
							while (check < findllength) {
								if(temp.charAt(a+check)==findstr.charAt(check)){
									check++; 
								}else{
									break;
								}
							}
							if(check==findllength){  
								hs.add(d); 
							}
						
						}
					}
					
					
					//  영문 이름 부분 검색
					temp = "";
					numberoffind = temp.length() - findllength;
					for(int i=0;i<c.getString(1).length();i++){
						if(Character.getType(c.getString(1).charAt(i))==1){ 
							for(int a=0;a<UPPERCASE.length;a++){
								if(c.getString(1).charAt(i)==UPPERCASE[a]){
									temp += LOWERCASE[a];  
								}							
							}
											
						}else if(Character.getType(c.getString(1).charAt(i))==2){
							temp += c.getString(1).charAt(i);
						}
					}
					
					if (temp.length() >= findllength) { 
						for (int a = 0; a <= numberoffind; a++) {
							check = 0;
							while (check < findllength) {
								if(temp.charAt(a+check)==findstr.charAt(check)){
									check++; 
								}else{
									break;
								}
							}
							if(check==findllength){  
								hs.add(d); 
							}
						
						}
					}
					
				}
				
				break;
			case 5: 
				while (c.moveToNext()) {
					Data d = new Data();
					
					d.setNid(c.getInt(0));
					d.setNname(c.getString(1));
					d.setDepartment(c.getString(2));
					d.setGrade(c.getString(3));
					d.setCompany(c.getString(4));
					d.setPhoneNum(c.getString(5));
					d.setTelNum(c.getString(6));
					d.setEmail(c.getString(7));
					d.setAddress(c.getString(8));
					d.setrDate(c.getString(9));
					d.setStyleId(c.getInt(10));
					d.setCategory(c.getString(11));
					
					//초성 이름 검색 부분
					
					String temp = "";
					for(int i=0;i<c.getString(1).length();i++){
						if(Character.getType(c.getString(1).charAt(i))==5){ // 한글확인
							temp += c.getString(1).charAt(i);  // 한글 부분만 잘라서 재 구성
						}
					}
					int check = 0;
					int findllength = findstr.length();  // 검색어의 길이
					int numberoffind = c.getString(1).length() - findllength; // 검색 횟수(검색 대상 - 검색어)
					
					if (temp.length() >= findllength) { //검색어의 길이가 검색 대상의 길이보다 작거나 같으면 
						for (int a = 0; a <= numberoffind; a++) { // 검색 횟수 만큼 반복
							check = 0; // 초기화
							while (check < findllength) { //일치하는부분을 찾을때까지 반복
								if (isInitialSound(findstr.charAt(check))) {//검색어에 자음이 있는지 확인
									if(getInitialSound(temp.charAt(a+check))==findstr.charAt(check)){//검색어의 자음과 검색 대상의 자음 일치 확인
										check++; // 일치하면 다음 단어로 넘어가기 위해 ++
									}else{break;}
								}else{  // 검색어가 초성이 아닌 단어인 경우
									if(temp.charAt(a+check)==findstr.charAt(check)){  // 단어의 일치 확인
										check++; //일치하면 다음 단어로 넘어가기 위해 ++ 
									}else{break;}
								}
							}
							if(check==findllength){  //검색어와 매치된 숫자가 같은 데이터를 발견하면 데이터 추가
								hs.add(d); // 중복 방지를 위해 해시셋에 저장(정렬도 중요하기 때문에 링크드 사용)
							}
							
						}
					}
					//초성 회사명 검색 부분
					temp ="";
					for(int i=0;i<c.getString(4).length();i++){
						if(Character.getType(c.getString(4).charAt(i))==5){
							temp += c.getString(4).charAt(i);}
					}
					int numberoffindcom = temp.length() - findllength;
					if (temp.length() >= findllength) { 
						for (int a = 0; a <= numberoffindcom; a++) {
							check = 0;
							while (check < findllength) {
								if (isInitialSound(findstr.charAt(check))) {
									if(getInitialSound(temp.charAt(a+check))==findstr.charAt(check)){
										check++; 
									}else{break;}
								}else{ 
									if(temp.charAt(a+check)==findstr.charAt(check)){
										check++; 
									}else{break;}
								}
							}
							if(check==findllength){hs.add(d);}
						}
					}
				}
				
				break;

			case -1: 
				al.clear();
				break; 
			}	
		}
		al.addAll(hs); 
		return al;
	}
	



	public boolean insertOther(Data d) {		//다른사람명함 받을때 저장되는 insert
		boolean flag = true;
		db = getWritableDatabase();
		String sql = "insert into namecard(nname, department, grade, company, phonenum, telnum, email, address, rdate, styleid, category, mtitle) "
				+ "values(?, ?, ?, ?, ?, ?, ?, ?, datetime('now'), ?, ?, 0) ";
		String[] params = { d.getNname(), d.getDepartment(), d.getGrade(),
				d.getCompany(), d.getPhoneNum(), d.getPhoneNum(), d.getEmail(), d.getAddress(),
				STYLEID, d.getCategory()};
		try {
			db.beginTransaction();
			db.execSQL(sql, params);
			db.setTransactionSuccessful();
		} catch (Exception ex) {
			flag = false;
			Log.e("sql error", ex.toString());
		} finally {
			db.endTransaction();
		}
		return flag;
	}
	public boolean insertMine(Data d){
		boolean flag = true;
		db=getWritableDatabase();
		String sql = "insert into namecard(nname, department, grade, company, phonenum, telnum, email, address, rdate, styleid, category, mtitle) "
				+ "values(?, ?, ?, ?, ?, ?, ?, ?, datetime('now'), ?, 'mine', 0) ";
		String[] params = { d.getNname(), d.getDepartment(), d.getGrade(),
				d.getCompany(), d.getPhoneNum(), d.getTelNum(), d.getEmail(), d.getAddress(),
				STYLEID};
		try {
			db.beginTransaction();
			db.execSQL(sql, params);
			db.setTransactionSuccessful();
		} catch (Exception ex) {
			flag = false;
			Log.e("sql error", ex.toString());
		} finally {
			db.endTransaction();
		}
		return flag;
	}

	public boolean modifyMineTitle(int nid){			//대표명함지정할때 이 메소드를 사용하여 수정
		boolean flag = true;
		db=getWritableDatabase();
		String sql = "update namecard set mtitle=0";
		String sql2 = "update namecard set mtitle=1 where nid=?";
		String[] params={String.valueOf(nid)};
		
		try{
			db.beginTransaction();
			db.execSQL(sql);
			db.execSQL(sql2, params);
			db.setTransactionSuccessful();
		}catch(Exception ex){
			flag = false;
			Log.e("sql error", ex.toString());
		}
		finally{
			db.endTransaction();
		}
		
		return flag;
	}
	public boolean modify(Data d) {			// 내 명함 수정할때 사용하는 메소드
		boolean flag = true;
		db = getWritableDatabase();
		String sql = "update namecard set nname=?, department=?, grade=?, company=?, phonenum=?, telnum=?, email=?, address=?,"
				+ "styleid=?, mtitle=? where nid = ?";
		String[] params = { d.getNname(), d.getDepartment(), d.getGrade(),
				d.getCompany(), d.getPhoneNum(), d.getTelNum(), d.getEmail(), d.getAddress(),
				STYLEID,String.valueOf(d.getMtitle()),String.valueOf(d.getNid())};
		try {
			db.beginTransaction();
			db.execSQL(sql, params); 
			db.setTransactionSuccessful();
		} catch (Exception ex) {
			flag = false;
			Log.e("sql error", ex.toString());
		} finally {
			db.endTransaction();
		}

		return flag;
	}
	public boolean modifyCategory(String category, int nid){		//카테고리를 나누는 메소드
		boolean flag = true;
		db = getWritableDatabase();
		String sql = "update namecard set category = ? where nid = ? ";
		String[] params = {category, String.valueOf(nid) };
		try{
			db.beginTransaction();
			db.execSQL(sql, params);
			db.setTransactionSuccessful();
		}catch(Exception ex){
			flag = false;
			Log.e("sql error", ex.toString());
		}finally{
			db.endTransaction();
		}
		
		return flag;
		
	
	}
	
	
	public boolean delete(int nid) {
		boolean flag = true;
		
		db = getWritableDatabase();
		String sql = "delete from namecard where nid=?";
		String[] params = { String.valueOf(nid) };
		
		try {
			db.beginTransaction();
			db.execSQL(sql, params);
			db.setTransactionSuccessful();
		} catch (Exception e) {
			flag = false;
		}finally{
			db.endTransaction();
		}
		
		return flag;
	}
	
	
	
	private static char getInitialSound(char c) { // 초성 자음 잘라주는 메소드
		int hanBegin = (c - BASE_CODE);
		int index = hanBegin / CHOSUNG;
		return CHOSUNG_LIST[index]; 
	}

	
	private static boolean isInitialSound(char searchar) { //검색어가 자음인지 확인하는 메소드
		for (char c : CHOSUNG_LIST) {
			if (c == searchar) {
				return true;
			}
		}
		return false;  // 자음이면 트루 반환
	}
	
	private int findGetType(String find){
		int check = -1;
		int findtype = Character.getType(find.charAt(0));
		
		for(int a=0;a<find.length();a++){
			if(Character.getType(find.charAt(a)) == findtype){
				check = findtype;
			}else{
				check = -1;	
				break;
			}
		}
		
		
		
		return check;
	}
	
}
